openfisca-japan リファクタリング候補
世帯員の整理
自分が納税者に該当しない場合どう計算するか(まだアイデアなし)
issue化済み
★設計(Scrapboxに書いたメモ)をGitHubにまとめる
負荷の高い(利用が少ない)中間変数をキャッシュしないようにする (cache_blacklist)
世帯シミュレータ開発の際に重要になる?
★Variableに衝突しない命名を使用する
何の領域で使われているか接頭辞を付ける
例 所得税_配偶者控除と 住民税_配偶者控除
ルールを機械的に決めておいた方が良い?
制度の調査をすすめないと分からない部分もある
アイデア(最終的に):ディレクトリ構成と揃う形にする
pythonオブジェクトの. の前に付けるイメージ
csvは assets 配下で管理、parametersとは区別する
parametersはあくまでOpenFiscaの仕組みなので
csvファイル読み込みの関数化
ヘルパー関数をutil?common?に作成する
学年の変換
当該年の12月31日
★期間換算に定数(12 で割る等)を使う代わりに変換を使う
options = [ADD]
★numpy関数をOpenFisca関数に置き換える
np.sum, np.min, np.max -> 対象世帯.sum, ...
np.select -> switch
政策シミュレータだと思った挙動にならない
複数世帯の場合、全世帯の全メンバーの和になってしまう
対象世帯.sumの場合だと分けられる
順序を考慮したものをどう置き換えるか
最大・最小 の扱い
いろいろややこしい実装になっている
厳密に一意の値を算出するには入力する情報が負担が増える。
決め打ちでどれかのパターンをだすと嘘になりかねない
コーディング方法
「_最大」「_最小」は他のプレフィックスと区別がつかないかも
「__max」「__min」
OpenFisca推奨の書き方がある
code:python
小学三年生である = 世帯員の学年一覧 == 小学生学年.三年生.value # 条件に該当するか否かのbool値のndarray配列ができる
小学六年生である = 世帯員の学年一覧 == 小学生学年.六年生.value
中学三年生である = 世帯員の学年一覧 == 中学生学年.三年生.value
高校三年生である = 世帯員の学年一覧 == 高校生学年.三年生.value
ボーナス対象学年である = 小学三年生である + 小学六年生である + 中学三年生である + 高校三年生である # OpenFiscaでは or の代わりに + を用います
給付金額一覧 = 年齢が3の倍数である * (定数) + ボーナス対象学年である * (定数) # 世帯員ごとに給付される額が格納されたndarray配列ができる
給付金額 = 対象世帯.sum(給付金額一覧) # numpy の関数はできるだけ使わないことが望ましい
複数世帯の場合のテストを書こうとするとここで落ちることが多いので注意
has_roleを使って 「」
検討の結果不要だったもの
割合を表わすものをVariable化
逓減率
直近だとこれだけ?優先度は高くないかも parameterで十分だった